package org.zjt.weather.demo;

import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.io.WritableComparator;

/**
 * DESC 将数据合并到reduce中。      merge操作，只对key操作。
 * <p>
 * <p>
 * 要解决这个问题，就得借助GroupingComparator了，其工作机制是这样：
 * 当mapper输出的相同partition的kv数据到达一个Reducer后，会有一个聚合的过程，即将“相同”key的kv聚合到一起
 * （其实质是利用GroupingComparator来对key进行比较），然后将这一组聚合好的kv中最前面的一个kv的key传给reduce方法的入参key，将一个用来遍历这一组kv数据的values的迭代器iterator传给reduce方法的入参iterator。
 *
 * @author
 * @create 2017-05-23 下午2:16
 **/
public class WeatherGroup extends WritableComparator {

    // TODO: 2017/5/23  WeatherKey是中的key，WeatherGroup只对key操作。
    public WeatherGroup() {
        super(WeatherKey.class, true);
    }


    /**
     * 将相同年月的key数据归档到同一个reduce中。
     *
     * @param a
     * @param b
     * @return
     */
    @Override
    public int compare(WritableComparable a, WritableComparable b) {
        WeatherKey var1 = (WeatherKey) a;
        WeatherKey var2 = (WeatherKey) b;
        int var3 = Integer.compare(var1.getYear(), var2.getYear());
        if (var3 != 0)
            return var3;
        return Integer.compare(var1.getMonth(), var2.getMonth());
    }
}
